\documentclass[10pt]{article}

\title{75.10 - Simulador de Carreras}
\author{Grupo Número 6}

% Definición del tamaño de página y los márgenes:
\usepackage[a4paper,hoffset=0.5cm,left=2cm]{geometry}
%\usepackage[latin1]{inputenc}
\usepackage[utf8]{inputenc}
% Vamos a escribir en castellano:
\usepackage[spanish]{babel}
\usepackage{courier}
% Para multicolumnas faciles, ver la caratula.
\usepackage{multicol}
% Para rotar paginas
\usepackage{lscape}
% Para caracteres en los enumerados.
\usepackage{enumerate}

% Para tener cabecera y pie de página con un estilo personalizado:
\usepackage{fancyhdr}

%\usepackage{pdfpages}

\usepackage{amsfonts}
\usepackage{float}
% Para poner el texto "Figura X" en negrita
\usepackage[hang,bf]{caption}

%
% Para incluir imágenes, el siguiente código carga el paquete graphicx 
% según se está generando un archivo dvi o un pdf (con pdflatex). 
%
\newif\ifpdf
\ifx\pdfoutput\undefined
	\pdffalse
\else
	\pdfoutput=1
	\pdftrue
\fi

\ifpdf
	\usepackage[pdftex]{graphicx}
	\pdfcompresslevel=9
\else
	\usepackage[dvips]{graphicx}
\usepackage{multicol}
\fi

% Todas las imágenes están en el directorio img:
%
%\newcommand{\imgdir}{img}
%\graphicspath{{\imgdir/}}
%------------------------- Inicio del documento ---------------------------

\begin{document}


%
% Hago que en la cabecera de página se muestre a la derecha la sección,
% y en el pie, en número de página a la derecha:
%
\pagestyle{fancy}
\renewcommand{\sectionmark}[1]{\markboth{}{\thesection\ \ #1}}
\lhead{}
\chead{}
\rhead{\rightmark}
\lfoot{}
\cfoot{}
\rfoot{\thepage}

%
% Carátula:
%
\begin{titlepage}
%
% Sin cabecera ni pie de página:
%
	\thispagestyle{empty}
%
% Título:
%
	\hspace{40cm}
	\begin{center}
		\Huge{75:10 Técnicas de Diseño}\\
		\vspace{1cm}
		\large{Trabajo práctico}\\
		\Large{Segunda entrega}\\
		\Huge{Simulador de Carreras}\\
		\vspace{1cm}
	\end{center}
	\hspace{20cm}
%	\vspace{1cm}

%	
% Integrantes:
%
	\vfill
	\hspace{20cm}
	\begin{center}
%	\begin{multicols}{2}
	\begin{flushleft}
		\begin{tabular}{llll}
			\multicolumn{4}{l}{\bf Grupo 6:} \\
			\multicolumn{2}{l}{\it Integrantes:} \\
			& Anaya, Roxana Maribel & 82875 & maribel.anaya@gmail.com \\
			& Esteban Alejandro Czelada & 79992 & gauchomouse@gmail.com \\
			& Gorgazzi, Martín Osvaldo & 80843 & martin.gorgazzi@gmail.com\\
			& Ledo, María Soledad & 82402 & msledo@gmail.com \\
			& Saldaño, María Alejandra & 85019 & alejandrasaldanio@yahoo.com.ar \\
			& Tripodi, Eduardo Martín & 80236 & tripo03@gmail.com \\
		\end{tabular}
	\end{flushleft}

	\begin{flushleft}
		\begin{tabular}{lll}
			\multicolumn{3}{l}{\bf Cátedra:} \\
			\multicolumn{2}{l}{\it Titular:} \\
			& Ing. Guillermo G. Pantaleo \\
%			\multicolumn{2}{l}{\it JTP:} \\
%			& Ing Diego Montaldo \\
			\multicolumn{2}{l}{\it Ayudante:} \\
			& Florencia Diaz \\
		\end{tabular}
	\end{flushleft}

%	\end{multicols}
	\end{center}
	\vfill
%
% Fecha o cuatrimestre:
%
\flushright{2\sptext{do} cuatrimestre 2009}
\end{titlepage}

%l
% Hago que las páginas se comiencen a contar a partir de aquí:
%
\setcounter{page}{1}
\tableofcontents
\newpage
\listoffigures
%\listoftables
\newpage

%\section{Enunciado}
%\input{fuentes/enunciado}
%\newpage

\section{Organización del trabajo}
\subsection{Hipótesis}
\begin{enumerate}[\indent a. ]
	\item Cada cuadra tiene un solo sentido, son solo de asfalto y tiene una única velocidad máxima.
	\item Los vehículos van a tener 3 posiciones solamente: vertical, horizontal y diagonal.
	\item Cuando los autos chocan automáticamente pierden y después de 50 tick desaparecen de la competencia.
	\item La cantidad de puntos que se decrementan al carnet del conductor es de 1 punto por cada infracción.	
	\item Cada jugador solo puede elegir un solo auto para competir en una carrera.	
	\item Si un auto esta circulado a una velocidad máxima en cada tick se va a mover una posición de la grilla.En cambio si circula en un velocidad media después de 2 tick se va a mover a la siguiente posición de la grilla y así sucesivamente para las distintas velocidades.	
	\item En la creación de una carrera se debe establecer el horario de largada.	
	\item Al iniciar la Carrera, todos los vehículos que compiten se encuentran en el punto de largada. 
\end{enumerate}

\subsection{Lista de tareas}
\begin{enumerate}
	\item Casos de Uso.
	\item Diseño del modelo.

	Diseño del modelo completo de una carrera, con vehículos, conductores, multas, puntuaciones, conductores, etc.

	\item Mensajería y comunicación con los clientes.
	
	Manera de proveer a los clientes (jugadores) la información de cada carrera. Así como también los medios para inscribirse en las que aun no han sido cerradas. Formato de mensajes.

	\item Control de la ejecución de la simulación.

		Definir:
		\begin{itemize}
			\item La forma en que se define quien y como actúa en cada instante.
			\item Las clases necesarias para el control de la simulación como un todo.
		\end{itemize}
		Proveer una manera de secuenciar tareas transparente al modelo.

	\item Arquitectura. 

		Estructura general de todo el sistema, con las interfaces necesarias para separar las capas.		

	\item Resolución de las decisiones de conductores.

		Definir:
		\begin{itemize}
			\item La manera en que un conductor comprende la situaciones de su ambiente.
			\item La forma en que pondera las situaciones que considera importantes.
			\item El mecanismo de selección de las acciones a tomar.
			\item Manejo de decisiones pasadas y futuras, plan de acción.
			\item Tener en cuenta el recorrido en la lógica del conductor.
		\end{itemize}

	\item Carrera.

		Definir:
		\begin{itemize}
			\item Clases que representan el escenario.
			\item Elementos estáticos del escenario.
			\item Cuadras, Calles, Sentidos.
			\item Clases que representen secciones del escenario (para los rangos de visión de los conductores, cámaras y policías).
		\end{itemize}			

	\item Persistencia.

		Definir:
		\begin{itemize}
			\item Que clases requieren poder ser guardadas.
			\item Sobre que se almacenan los datos
				\begin{itemize}
					\item Compresión de archivos de texto.
					\item Base de datos vs. archivos planos XML.
				\end{itemize}
			\item Definir interfaz de interacción.
		\end{itemize}
		Candidatos a tener persistencia: 
		\begin{itemize}
			\item Configuraciones varias.
			\item Plantillas de carreras (configuración general sin tener en cuenta jugadores).
			\item Inscripciones a las distintas carreras.
			\item Carrera siendo simulada o ya terminada, más los cuadros simulados.
			\item Vehículos disponibles.
			\item Conductores disponibles.
			\item Registros de ejecución.
		\end{itemize}

	\item Capa lógica de persistencia (persistencia lógica).

		Fachada para la interacción con la persistencia física.
	
		Debe encapsular la implementación del almacenamiento de datos.

		Uniformizar la manera de almacenar las cosas.

		\emph{Idea:} aplicar AbstractFactory < de persistencia lógica > que sea capaz de comprender un "string de conexión" para la decisión de que AbstractFactory < de persistencia física > utilizar.

		Definir el comportamiento de:
		\begin{itemize}
			\item Clase Entidad.
			\item Clase Ensamblador.
			\item Excepción de Entidad incompatible (el Objeto no es compatible con el ensamblador suministrado).
			\item Excepción de Entidad no identificable (al obtener una entidad no se dan los datos necesarios para identificarla).
			\item Clase Registro de ensambladores (posible Singleton).
		\end{itemize}

	\item Capa de servicios de archivos o base de datos (persistencia física).
		
		Fachada de persistencia:
		\begin{itemize}
			\item Interfaz Estante.
			\item Interfaz EntidadFisica.
			\item Interfaz Atributo.
			\item Interfaz AtributoEntidad.
			\item Interfaz Almacen
			\item Excepciones varias asociadas con el mantenimiento de los almacenes y sus contenidos.
		\end{itemize}

	\item Persistencia a archivos XML.

		Implementar las clases necesarias para la persistencia de objetos en archivos XML (encapsulándolas para que sean accesibles mediante la capa de persistencia lógica).

	\item Capa de servicios de aplicación.
		
		Definir la interacción con los diferentes clientes.

	\item Obstáculos y control.

		Definir las responsabilidad de los obstáculos y los encargados de controlar las leyes.
		\begin{itemize}
			\item Interfaz Obstáculo.
			\item Clase Parada.
			\item Clase Bache.
			\item Interfaz Control.
			\item Clase Cámara.
			\item Clase Policía
			\item Clase Semáforo.
		\end{itemize}

	\item Objetos que ocupan un lugar del escenario.
	
		Definir el comportamiento de:
		\begin{itemize}
			\item Interfaz Elemento.
			\item Clase Posición.
			\item Clase Grilla.
			\item Clase Autoparte.
			\item Clase Aretriaparte.
		\end{itemize}

	\item Encontrar recorrido.
		
		Definir el comportamiento de:
		\begin{itemize}
			\item Clase GuiaT.
			\item Clase Cruce.
			\item Clase Cuadra.
			\item Clase Recorrido.
			\item Clase Arteria.
		\end{itemize}

		Definir la manera de construir un recorrido.

	\item Vehículo.
		
		Definir las responsabilidades de un vehículo.
		
		Diagramas de secuencia de como resuelve el momento en que le toca mover (sin especificar la obtención de una acción a partir de acciones recomendadas).

	\item Infracciones y Control.
	
		Definir la clase Infracción así como también la administración de las infracciones que se le aplican a cada conductor. Sus puntajes y consecuencias.

	\item Toma de decisiones.
		
		Definir el comportamiento de:
		\begin{itemize}
			\item Clase Conductor.
			\item Clase Comportamiento.
			\item Clase Situación.
			\item Clase Acción.
			\item Interfaz MediadorDePrioridades.
		\end{itemize}

		Se debe tener en cuenta las interacciones con Obstáculo.

\end{enumerate}

\begin{center}          
	\begin{tabular}{|l|l|c|c|c|c|c|} \hline
		{\bf Tarea} & {\bf Encargado} & {\bf\%Diseño} & {\bf\%Imp.} & {\bf\%Doc.} & {\bf\%Comp.} & {\bf Estimado} \\ \hline
		1. Casos de Uso & Czelada & 100 & 0 & 0 & 90 & 30/11/2009 \\ \hline
		2. Modelo & Anaya, Gorgazzi & 100 & 0 & 0 & 90 & 30/11/2009 \\
                           & Ledo, Saldaño   &     &   &   &    & \\ \hline
		3. Mensajería & Czelada & 0 & 0 & 0 & 0 & 6/12/2009 \\ \hline
		4. Control de simulación & Czelada & 100 & 50 & 0 & 80 & 06/12/2009 \\ \hline
		5. Arquitectura & Todos & 90 & 0 & 0 & 0 & 30/11/2009 \\ \hline
		6. Resolución de decisiones & Gorgazzi & 100 & 0 & 0 & 0 & 13/12/2009 \\ \hline
		7. Carrera & Ledo & 100 & 0 & 0 & 0 & 13/12/2009 \\ \hline
		8. Persistencia & Czelada, Tripodi & 100 & 25 & 0 & 0 & 13/12/2009 \\ \hline
		9. Persistencia (lógica) & Czelada & 100 & 50 & 0 & 75 & 06/12/2009 \\ \hline
		10. Persistencia (física) & Czelada, Tripodi & 90 & 0 & 0 & 0 & 06/12/2009 \\ \hline
		11. Persistencia XML & Tripodi & 60 & 90 & 0 & 0 & 13/12/2009 \\ \hline
		12. Servicios de aplicación & & 0 & 0 & 0 & 0 & 06/12/2009 \\ \hline
		13. Obstáculos y control & Gorgazzi, Ledo & 100 & 0 & 0 & 0 & 13/12/2009 \\ \hline
		14. Elementos & Gorgazzi, Saldaño & 100 & 0 & 0 & 0 & 13/12/2009 \\ \hline
		15. Encontrar recorrido & Gorgazzi & 100 & 0 & 0 & 0 & 13/12/2009 \\ \hline
		16. Vehículo & Anaya & 100 & 0 & 0 & 0 & 13/12/2009 \\ \hline
		17. Control de transito & Anaya & 100 & 0 & 0 & 0 & 13/12/2009 \\ \hline
		18. Toma de decisiones & Gorgazzi, Saldaño & 95 & 0 & 0 & 0 & 20/12/2009 \\ \hline
	\end{tabular}
	\label{tab:Responsabilidades}
\end{center}

\newpage
\subsection*{Tareas realizadas hasta el momento por cada integrante del grupo:}
\begin{itemize}
	\item Anaya:
	\begin{itemize}
		\item Definición de los casos de uso Crear Carrera, Inscribir en Carrera y Simular Carrera.
		\item Transcripción de minutas de reunión.
		\item Construcción de las vistas Lógica, de Procesos, de Despliegue y de Componentes.
	\end{itemize}

	\item Czelada:
	\begin{itemize}
		\item Diseño y bosquejo de implementación de control de simulación.
		\item Diseño de la fachada de la capa física (persistencia física).
		\item Carga de minutas de reunión, diagramas y casos de uso en la wiki.
		\item Declaración de casos de uso.
		\item Compaginación del presente informe.
	\end{itemize}

	\item Gorgazzi:
	\begin{itemize}
		\item Diseño del modelo.
		\item Diagrama de clases de diseño.
		\item Diagrama de secuencia de toma de decisiones del conductor.
	\end{itemize}

	\item Ledo:
	\begin{itemize}
		\item Diseño del modelo.
		\item Diagrama de clases de diseño, asignación de responsabilidades.
		\item Construcción de las vistas Lógica, de Procesos, de Despliegue y de Componentes.
	\end{itemize}

	\item Saldaño:
	\begin{itemize}
		\item Diseño del modelo.
		\item Definición de los casos de uso Mantener Vehículo, Mirar Carrera y Inscribir en Carrera.
	\end{itemize}

	\item Tripodi:
	\begin{itemize}
		\item Diseño de la fachada de la capa física (persistencia física).
		\item Diseño e Implementación de servicios básicos de persistencia sobre archivos XML.
	\end{itemize}
\end{itemize}


\newpage
\section{Casos de uso}
\begin{center}
%	\addcontentsline{toc}{subsection}{Diagrama de casos de uso}
	\includegraphics[scale=0.50]{img/CasosDeUso.png}
	\captionof{figure}{Diagrama de casos de uso}
	\label{fig:CasosDeUso}
\end{center}

\newpage
\subsection{Especificación de casos de uso}

\input{fuentes/CU_MantenerVehiculo.tex}

\subsection{Mantener Conductor}
Ver Mantener Vehículo.

\subsection{Mantener Escenario}
Ver Mantener Vehículo.

\subsection{Mantener Carrera}
Ver Mantener Vehículo.

\input{fuentes/CU_CrearCarrera.tex}

\newpage
\input{fuentes/CU_SimularCarrera.tex}

\newpage
\input{fuentes/CU_InscribirseEnCarrera.tex}

%\subsubsection{Seleccionar Vehículo}
%\subsubsection{Definir Conductor}

\newpage
\input{fuentes/CU_MirarCarrera.tex}

\newpage
\section{Diagramas de Arquitectura}
\begin{center}
	\addcontentsline{toc}{subsection}{Vista lógica}
	\includegraphics[scale=0.55]{img/vLogica.png}
	\captionof{figure}{Vista lógica}
	\label{fig:vLogica}
\end{center}

%\subsection{Vista de Componentes}
\begin{center}
	\addcontentsline{toc}{subsection}{Vista de componentes}
	\rotatebox{90}{ \includegraphics[scale=0.55]{img/vComponentes.png} }
	\captionof{figure}{Vista de componentes}
	\label{fig:vComponentes}
\end{center}

\newpage
%\subsection{Vista de Procesos}
\begin{center}
	\addcontentsline{toc}{subsection}{Vista de procesos}
	\includegraphics[scale=0.5]{img/vProcesos.png}
	\captionof{figure}{Vista de procesos}
	\label{fig:vProcesos}
\end{center}

%\subsection{Vista de Despliegue}
\begin{center}
	\addcontentsline{toc}{subsection}{Vista de despliegue}
	\includegraphics[scale=0.5]{img/vDespliegue.png}
	\captionof{figure}{Vista de despliegue}
	\label{fig:vDespliegue}
\end{center}

\newpage

\section{Diagramas del paquete modelo}

\begin{center}
	\addcontentsline{toc}{subsection}{Elementos}
	\includegraphics[scale=0.55]{img/GeneralElementos.png}
	\captionof{figure}{Clases que ocupan un lugar físico del escenario.}
	\label{fig:GeneralElementos}
\end{center}

\begin{landscape}
\begin{center}
	\addcontentsline{toc}{subsection}{Secuenica de una carrera}
	\includegraphics[scale=0.40]{img/GeneralSecuenciaCarrera.png}
	\captionof{figure}{Diagrama de secuencia de una carrera.}
	\label{fig:GeneralSecuenciaCarrera}
\end{center}
\end{landscape}

\begin{landscape}
\begin{center}
	\addcontentsline{toc}{subsection}{Toma de decisiones}
	\includegraphics[scale=0.42]{img/GeneralTomaDeDecisiones.png}
	\captionof{figure}{Diagrama de secuencia de la toma de decisiones por parte de un conductor.}
	\label{fig:GeneralTomaDeDecisiones}
\end{center}
\end{landscape}

\begin{center}
	\addcontentsline{toc}{subsection}{Diagrama de Carrera}
	\includegraphics[scale=0.55]{img/GeneralCarrera.png}
	\captionof{figure}{Clase Carrera. Representación de una carrera (programada, en ejecución o terminada)}
	\label{fig:GeneralCarrera}
\end{center}

\begin{center}
	\addcontentsline{toc}{subsection}{Diagrama de Vehículo}
	\includegraphics[scale=0.55]{img/GeneralVehiculo.png}
	\captionof{figure}{Relaciones directas de la clase Vehículo.}
	\label{fig:GeneralVehiculo}
\end{center}

\begin{landscape}
\begin{center}
	\addcontentsline{toc}{subsection}{Diagrama global del paquete modelo}
	\includegraphics[scale=0.30]{img/GeneralModelo.png}
	\captionof{figure}{Diagrama global del paquete modelo.}
	\label{fig:GeneralModelo}
\end{center}
\end{landscape}

\section{Diagramas del paquete simulación}

\begin{center}
	\addcontentsline{toc}{subsection}{Modelo de control de simulación}
	\includegraphics[scale=0.55]{img/ControlModelo.png}
	\captionof{figure}{Modelo de simulación.control}
	\label{fig:ControlModelo}
\end{center}

\begin{center}
	\addcontentsline{toc}{subsection}{Secuencia tentativa de control de simulación}
	\includegraphics[scale=0.55]{img/ControlSiguienteInstante.png}
	\captionof{figure}{Secuencia tentativa de control de simulación. Escenario: Activar todo en cada instante.}
	\label{fig:ControlSiguienteInstante}
\end{center}


\section{Diagramas del paquete persistencia (persistencia lógica)}

\begin{center}
	\addcontentsline{toc}{subsection}{Interfaz entre la capa de persistencia y la física}
	\includegraphics[scale=0.55]{img/PersistenciaModelo.png}
	\captionof{figure}{Interfaces provistas para encapsular la persistencia.}
	\label{fig:PersistenciaModelo}
\end{center}

\section{Diagramas del paquete física (persistencia física)}

\begin{center}
	\addcontentsline{toc}{subsection}{Persistencia en archivos XML}
	\includegraphics[scale=0.55]{img/PersistenciaXML.png}
	\captionof{figure}{Clases para proveer los servicios de persistencia sobre XML.}
	\label{fig:PersistenciaXML}
\end{center}

\end{document}
